package com.atguigu.gmall.product.service;

import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.model.product.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @program: gmall-parent
 * @author: Mr.Zhuo
 * @create: 2022-04-02 10:17
 **/
public interface ManageService {


    //获取分类的一级
    List<BaseCategory1> findAll();

    //根据一级分类Id 查询二级分类数据
    List<BaseCategory2> getCategory2(Long category1Id);

    //根据二级分类Id 查询三级分类数据
    List<BaseCategory3> getCategory3(Long category2Id);

    //根据分类Id 获取平台属性数据
    List<BaseAttrInfo> attrInfoList(Long category1Id, Long category2Id, Long category3Id);

    //保存-修改平台属性
    void saveAttrInfo(BaseAttrInfo baseAttrInfo);

    //根据平台属性Id 获取到平台属性值集合
    List<BaseAttrValue> getAttrValueList(Long attrId);

    // 我们要完成业务的完整性
    //根据平台属性Id 获取到平台属性值集合
    BaseAttrInfo getBaseAttrInfo(Long attrId);

    /**
     * spu分页查询
     * @param pageParam
     * @param spuInfo
     * @return
     */
    IPage<SpuInfo> getSpuInfoPage(Page<SpuInfo> pageParam, SpuInfo spuInfo);

    //保存spu
    void saveSpuInfo(SpuInfo spuInfo);

    // 销售属性
    List<BaseSaleAttr> getBaseSaleAttrList();

    //根据spuId查询SpuInfo
    SpuInfo getSpuInfo(Long spuId);

    //更新spu的数据
    void updateSpuInfo(SpuInfo spuInfo);

    //根据spuId 查询销售属性
    List<SpuSaleAttr> getSpuSaleAttrList(Long spuId);

    //根据spuId 获取spuImage 集合
    List<SpuImage> getspuImageList(Long spuId);

    // 保存SkuInfo
    void saveSkuInfo(SkuInfo skuInfo);

    //sku分页列表
    IPage getSkuInfoPage(Page<SkuInfo> skuInfoPage, SkuInfo skuInfo);

    //根据skuId  获取SkuInfo
    SkuInfo getSkuInfo(Long skuId);

    //根据skuId获取sku基本信息与图片信息
    SkuInfo getSkuInfo(Long skuId,boolean flag);

    //更新updateSkuInfo
    void updateSkuInfo(SkuInfo skuInfo);

    //商品上架
    void onSale(Long skuId);

    //商品下架
    void cancelSale(Long skuId);

    //获取sku最新价格
    BigDecimal getSkuPrice(Long skuId);

    //通过三级分类id查询分类信息
    BaseCategoryView getCategoryViewByCategory3Id(Long category3Id);

    //根据spuId，skuId 查询销售属性集合
    List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(Long skuId, Long spuId);

    //根据spuId 查询map 集合属性
    Map getSkuValueIdsMap(Long spuId);

    //  根据spuId 获取海报数据
    List<SpuPoster> findSpuPosterBySpuId(Long spuId);

    //通过skuId 集合来查询数据
    List<BaseAttrInfo> getAttrList(Long skuId);

    //获取全部分类信息
    List<JSONObject> getBaseCategoryList();


    //通过品牌Id 集合来查询数据
    BaseTrademark getTrademark(Long tmId);
}
